На главную ↑

Оглавление

Введение

Функции

Структура tree_list

Стили элемента

Введение

Внешний вид элемента управления TreeList:

Рис. 1. Окно программы с элементом TreeList

Функции

tl_data_init

Конструктор элемента, нужно вызывать перед использованием элемента для выделения памяти и других настроек.

tl_data_clear

Деструктор элемента, чистит память по указателям: data_info, data_nodes, data_img и data_img_sys. Если в программе используется несколько элементов с одинаковыми иконками, то указатели data_img и data_img_sys нужно приравнять к 0 в других элементах, так что-бы при вызове деструкторов не было повторного удаления одних и тех же иконок.

tl_info_clear

Очистка списка от всех узлов. Это действие нельзя отменить функцией tl_info_undo.

tl_key

Функция которую нужно вызывать при нажатии на клавиатуру. Кнопки, которые не доступны если есть стиль tl_key_no_edit: [Enter], [Delete], [], []. Всегда доступны: [], [], [Page Up], [Page Dn], [Space]. Функция проверяет включен ли режим scan кодов, и в случае необходимости сама преобразует коды.

tl_mouse

Функция для событий от мыши.

tl_draw

Полная перерисовка окна элемента.

tl_info_undo

Отменяет добавление узлов. Действует только на весь узел целиком, не учитывая изменения внутри узлов. Т. е. нельзя отменить действия выполненные например функциями: tl_node_set_data, tl_node_lev_inc и им подобным.

tl_info_redo

Повтор отмененных действий. Обратная функция по отношению к tl_info_undo.

tl_node_add

Добавляет узел, в позицию указанную курсором. Пример добавления узла:

	stdcall dword[tl_node_add], tree1,0x10002,data_buffer

где: tree1 - структура tree_list; 0x10002 - параметры узла (старшие байты 0x0001 - индекс иконки, отображаемой возле узла; меньший байт 0x02 - уровень вложености узла); data_buffer - указатель на дынные, добавляемые в узел.

tl_node_set_data

Устанавливает новые данные (пользовательские и подпись) в узел под курсором.

tl_node_get_data

Берет указатель на данные (пользовательские и подпись) из узла под курсором.

Пример 1:

	stdcall [tl_node_get_data], tree1

где: tree1 - структура tree_list; eax - указатель на дынные узла.

Пример 2:

	NODE_SIZE equ 200
	node_data rb NODE_SIZE
.........
push eax ecx esi edi
	stdcall [tl_node_get_data], tree1
	mov esi,eax
	mov edi,node_data
	mov ecx,NODE_SIZE
	cld
	rep movsb
pop edi esi ecx eax

где: tree1 - структура tree_list; NODE_SIZE - размер дынных узла; node_data - копия на дынных узла.

tl_node_delete

Удаляет узел, но не окончательно, при необходимости узел можно вернуть функцией tl_info_undo.

tl_cur_beg

Ставит курсор в начало списка, перематывает скроллинг если нужно.

tl_cur_next

Переносит курсор на одну позицию ниже.

tl_cur_perv

Переносит курсор на одну позицию выше.

tl_node_close_open

Открывает или закрывает родительский узел. Если у узла нет дочерних элементов, то ничего не делает. Автоматически перерисовывает окно если состояние узла изменилось.

tl_node_lev_inc

Добавить уровень узла под курсором. Делает узел дочерним.

tl_node_lev_dec

Уменьшает уровень узла под курсором. Делает узел родительским.

tl_node_move_up

Перемещает вверх узел под курсором. Вместе с узлом двигается также и курсор. Пример использования функции:

	push dword tree1
	call dword[tl_node_move_up] ;переместить узел

где: tree1 - структура tree_list

tl_node_move_down

Перемещает вниз узел под курсором. Вместе с узлом двигается также и курсор. Пример использования функции:

	push dword tree1
	call dword[tl_node_move_down] ;переместить узел

где: tree1 - структура tree_list

tl_node_poi_get_info

Берет внутренний указатель на структуру описывающую узел. Пример использования функции:

	stdcall dword[tl_node_poi_get_info], tree1, 0

где: tree1 - структура tree_list; 0 - позиция узла, с которого берется указатель; eax - указатель на структуру описывающую узел.

Замечание. Если узел с указанным индексом не найден, в указателе возвращается 0.

tl_node_poi_get_next_info

Берет указатель на следующий элемент в цепи, без учета открытия/закрытия дочерних узлов. Пример использования функции:

	stdcall dword[tl_node_poi_get_next_info], tree1, eax

где: tree1 - структура tree_list; eax - до вызова функции указатель на структуру описывающую узел, после вызова указатель на структуру описывающую следущий узел в цепи.

Замечание. Если следущий узел не найден, в указателе возвращается 0.

tl_node_poi_get_data

Берет указатель на данные (пользовательские и подпись) из узла указанного в указателе. Пример использования функции:

	stdcall dword[tl_node_poi_get_data], tree1,esi

где: tree1 - структура tree_list; esi - указатель на структуру описывающую узел; eax - указатель на данные узла, описанного в esi.

Указатель, возвращаемый функцией tl_node_poi_get_data аналогичен указателю возвращаемому функцией tl_node_get_data. Отличие функций в том, что tl_node_poi_get_data работает без задействования курсора. Функциями tl_node_poi_get_info, tl_node_poi_get_next_info и tl_node_poi_get_data можно считывать информацию о узлах элемента, при этом не меняя текущего положения курсора. Т. е. можно организовать доступ к даным элемента в "фоновом режиме".

tl_save_mem

Сохраняет информацию об узлах элемента в память. Пример использования функции:

	MEM_SIZE equ 5000
	node_data rb MEM_SIZE
.........
	stdcall dword[tl_save_mem], tree1, 0, node_data, MEM_SIZE

где: tree1 - структура tree_list; 0 - опция сохранения в начало блока памяти (если = 1, то добавляет элемент после других сохраненных ранее); node_data - указатель на блок памяти; MEM_SIZE - размер блока памяти для сохранения. В регистр eax пишется значение 0 или записываются коды ошибок сохранения.

tl_load_mem

Загружает информацию об узлах элемента из памяти. Пример использования функции:

	MEM_SIZE equ 5000
	node_data rb MEM_SIZE
.........
	stdcall dword[tl_load_mem], tree1, 0, node_data, MEM_SIZE

где: tree1 - структура tree_list; 0 - индекс считываемого элемента; node_data - указатель на блок памяти; MEM_SIZE - размер блока памяти для сохранения. В регистр eax пишется значение 0 или записываются коды ошибок считывания.

tl_get_mem_size

Вычисляет размер блока памяти (в который были раньше сохранены элементы). Эту функцию можно использовать перед сохранением на диск, для получения точного размера сохраняемых данных. Пример:

	MEM_SIZE equ 5000
	node_data rb MEM_SIZE
.........
	;сохраняем данные в 'node_data'
	stdcall dword[tl_save_mem], tree1, 0, node_data, MEM_SIZE
	pop eax ;код ошибки
.........
	;получаем размер данных в 'node_data'
	stdcall dword[tl_get_mem_size], tree1, node_data
	pop ecx ;размер данных, должен быть <= MEM_SIZE

version_tree_list

Версия элемента

Структура tree_list

struc tree_list info_size,info_max_count,style, img_cx,img_cy,\
	col_bkg,col_zag,col_txt, box_l,box_t,box_w,box_h, capt_cy,info_capt_offs,\
	info_capt_len,el_focus, p_scroll,on_press
{
.box_left    dd box_l
.box_top     dd box_t
.box_width   dd box_w
.box_height  dd box_h
.data_info   dd 0
.info_size   dw info_size
.info_max_count dd info_max_count
.style       dd style
.data_nodes  dd 0
.data_img    dd 0
.img_cx      dw img_cx
.img_cy      dw img_cy
.data_img_sys dd 0
.ch_tim      dd 0
.tim_undo    dd 0
.cur_pos     dd 0
.col_bkg     dd col_bkg
.col_zag     dd col_zag
.col_txt     dd col_txt
.capt_cy     dw capt_cy
.info_capt_offs dw info_capt_offs
.info_capt_len dw info_capt_len
.el_focus    dd el_focus
.p_scroll    dd p_scroll
.on_press    dd on_press
}

info_size - количество байт, которое будет выделено для каждого узла. Часть этой памяти пользователь может использовать для своих целей (регулируется через info_capt_offs и info_capt_len см. рис. 2) а остальная часть будет использована как подпись узла.

info_max_count - максимальное количество узлов, которые можно добавить в элемент.

style - стили элемента.

data_nodes - указатель на внутренние структуры узлов (TreeList).

data_img - указатель на изображения с иконками узлов. Формат изображения такой же как и в сист. ф. 7: BBGGRRBBGGRR....

img_cx - ширина одной иконки.

img_cy - высота одной иконки.

data_img_sys - указатель на системные изображения (курсор, плюсики, линии, ... все кроме иконок узлов). Формат изображения такой же как и в сист. ф. 7: BBGGRRBBGGRR...

col_bkg - цвет фона.

col_zag - цвет строки заголовка (если она задана) и кнопок и ползунка вертикальной полосы прокрутки (если она есть).

col_txt - цвет текста.

capt_cy - высота строки для подписи вверху элемента, если меньше 9 подпись не выводится.

info_capt_len - длинна текста для подписи. Если равно 0, то длинна считается так: info_size - info_capt_offs.

p_scroll - указатель на структуру скроллинга, связанного с данным элементом.

on_press - указатель на функцию, которая будет вызвана при нажатии [Enter]. Если указатель равен 0 то ничего не будет вызываться.

Рис. 2. Параметры info_size, info_capt_offs и info_capt_len в узле

Пример создания структуры:

tree1 tree_list 24,500, tl_draw_par_line+tl_list_box_mode, 16,16,\
	0x8080ff,0x0000ff,0xffffff, 10,35,200-16,285, 14,4,0,\
	el_focus, wScr,fun_on_enter

Стили элемента

tl_key_no_edit

Элемент нельзя редактировать на клавиатуре (изменять уровни, удалять). Ставьте этот стиль если нужно создать элемент только для просмотра данных.

tl_draw_par_line

Рисовать линии к родительскому узлу.

tl_list_box_mode

Стиль не отображает уровни (как в ListBox все узлы одного уровня).


Документация обновлялась последний раз 10.11.15.